const Koa = require('koa')
const app = new Koa()
const router = require('koa-router')()

const indent = (n) => new Array(n).join('&nbsp;');

// 中间件执行顺序： 洋葱模型
app.use(async (ctx, next) => {
  ctx.body = `<h1>${indent(2)}请求第一层数据</h1>` // 相应给了前端一段数据
  await next() // 把控制句柄交给下一个中间件
  ctx.body += `<h1>${indent(2)}响应第一层数据 ${JSON.stringify(ctx.state.user)} </h1>`
})

app.use(async (ctx, next) => {
  ctx.body += `<h1>${indent(6)}请求第二层数据</h1>`
  await next()
  ctx.body += `<h1>${indent(6)}响应第二层数据</h1>`
})

app.use(async (ctx, next) => {
  ctx.body += `<h1>${indent(12)}请求第三层数据</h1>`
  await next()
  ctx.body += `<h1>${indent(12)}响应第三层数据</h1>`
})

app.use(async (ctx, next) => {
  // ctx.state 命名空间 存储一些通用的数据
  ctx.state.user = { username: 'devin', password: '123' }
  ctx.body += `<h1>${indent(20)}核心业务数据</h1>`
})

app.listen(3000, () => {
  console.log(`server port is 3000`)
})